/**
 * 认证路由守卫
 */
import { useAuthStore } from '@/stores/auth.store'
import { useRouter, RouteLocationNormalized } from 'vue-router'
import { watch } from 'vue'

/**
 * 用于保护需要认证的路由
 * 在需要认证的页面组件中使用此composable
 */
export function useAuthGuard() {
  const authStore = useAuthStore()
  const router = useRouter()

  // 检查用户是否已认证，如果未认证则重定向到登录页面
  function checkAuth() {
    if (!authStore.isLoggedIn) {
      router.push('/login')
    }
  }

  // 初始检查
  checkAuth()

  // 监听认证状态变化
  watch(
    () => authStore.isLoggedIn,
    (isLoggedIn) => {
      if (!isLoggedIn) {
        router.push('/login')
      }
    }
  )

  return {
    isAuthenticated: () => authStore.isLoggedIn
  }
}

/**
 * 全局路由守卫设置
 * 在应用入口处调用此函数来设置全局路由守卫
 * @param router Vue Router实例
 * @param publicRoutes 不需要认证的路由路径数组
 */
export function setupAuthGuards(router: any, publicRoutes: string[] = ['/login', '/register']) {
  router.beforeEach((to: RouteLocationNormalized, from: RouteLocationNormalized, next: any) => {
    const authStore = useAuthStore()
    
    // 初始化认证状态
    authStore.initializeAuth()
    
    // 检查路由是否需要认证
    const requiresAuth = !publicRoutes.includes(to.path)
    
    if (requiresAuth && !authStore.isLoggedIn) {
      // 需要认证但用户未登录，重定向到登录页
      next('/login')
    } else {
      // 不需要认证或用户已登录，允许访问
      next()
    }
  })
}